/*************************************************************************
    > File Name: 1mmap.c
    > Author: Ykk
    > Mail: 3393579535@qq.com 
    > Created Time: 2023年04月19日 星期三 21时25分14秒
 ************************************************************************/

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<unistd.h>
#include<sys/stat.h>
#include<sys/types.h>
#include<fcntl.h>
#include<sys/mman.h>
#include<errno.h>
#include<sys/wait.h>

//父子进程使用匿名映射进行进程间通信
int main()
{
	int ret = -1;
	pid_t pid = -1;
	void *addr = NULL;

	//1.创建匿名映射
	addr = mmap(NULL,4096,PROT_READ | PROT_WRITE , MAP_SHARED | MAP_ANONYMOUS,-1,0);
	if(MAP_FAILED == addr)
	{
		perror("mmap");
		return 1;
	}

	//2.创建子进程
	pid = fork();
	if(-1 == pid)
	{
		perror("fork");
		munmap(addr,4096);
		return 1;
	}

	//3.父子进程通信
	if(0 == pid)
	{
		//子进程写
		memcpy(addr,"1234567890",10);
	}
	else
	{
		//父进程读
		wait(NULL);
		printf("parent process %s\n",(char *)addr);
	}

	//4.断开映射
	munmap(addr,4096);

	return 0;
}
